\documentclass{beamer}
\usetheme{Copenhagen}
\usepackage{mathtools}
\usepackage{graphicx}
\usepackage{tikz}
\usepackage[utf8x]{inputenc}
\usepackage{subfig}

\title{Progetto Algoritmi e Architetture per Sistemi Crittografici}
\subtitle{CUDA MD5 Breaker}
\author{Ponte Valerio, Viviani Ermes}
\date{}

\begin{document}
\maketitle
\begin{frame}
	\frametitle{Obiettivo}
	Obiettivo del progetto è la crezione di uno strumento di attacco a password *nix crittografate via MD5. In particolare il progetto deve essere progettato in modo da supportare un funzionamento parallelo su GPU.
\end{frame}
\begin{frame}
	\frametitle{Implementazione: parallelismo}
	\begin{itemize}
		\item GPU moderne offrono grandi potenzialità di parallelizzazione grazie al numero elevato di core
		\item algoritmi crittografici sono poco data intensive e più pesanti dal punto di vista algebrico
		\item idea di sfruttare i diversi core per cercare di rompere diverse password contemporaneamente
	\end{itemize}
\end{frame}
\begin{frame}
	\frametitle{Implementazione: modalità}
	\begin{description}
		\item[dizionario] Il breaker legge un file specificato dall'utente contenente una lista di parole, e per ognuna ne calcola l'hash, confrontando il risultato con l'hash obiettivo.
		\item[brute force] Il breaker genera una serie di stringhe utilizzando un alfabeto ed una lunghezza di parola specificati dall'utente, e per ognugna di queste ne calcola l'hash, confrontandolo con l'hash obiettivo. Le stringhe generate sono tutte le possibili permutazioni di lunghezza data sull'alfabeto.
	\end{description}
\end{frame}
\begin{frame}[fragile]
	\frametitle{Utilizzo}
 	./md5\_breaker [ -m mode ] [ -j jobs ] [ -d dictionary\_path ]
	
	[ -s salt ] [ -i target\_hash ] [ -l password\_length ]
	\begin{description}
		\item[mode] 0 per la modalità dizionario, 1 per la modalità brute force
		\item[jobs] numero di thread da utilizzare
		\item[dictionary\_path] file dizionario per la modalità 1
		\item[salt] stringa di sale crittografico
		\item[target\_hash] hash obiettivo, espresso come una stringa esadecimale
		\item[password\_length] lunghezza delle password generate in modalità 1
	\end{description}
\end{frame}
\begin{frame}
	\frametitle{Risultati: modalità a dizionario}
	\begin{figure}
	\centering
	\subfloat{\includegraphics[width=0.5\textwidth]{words_time.png}}
	\subfloat{\includegraphics[width=0.5\textwidth]{words_hash.png}}
	\caption{Tempi di analisi e password al secondo per un dizionario di 3169 parole.}
	\label{fig:words}
	\end{figure}
\end{frame}
\begin{frame}
	\frametitle{Risultati: modalità a forza bruta}
	\begin{figure}
	\centering
	\subfloat{\includegraphics[width=0.5\textwidth]{force_time.png}}
	\subfloat{\includegraphics[width=0.5\textwidth]{force_hash.png}}
	\caption{Tempi di analisi e password al secondo a forza bruta su 32768 parole.}
	\label{fig:words}
	\end{figure}
\end{frame}
\begin{frame}
	\frametitle{Conclusioni}
	\begin{itemize}
		\item Buona scalabilità nel numero di thread
		\item Modalità a dizionario meno performante
		\begin{itemize}
			\item memoria globale più utilizzata
		\end{itemize}
		\item Modalità a forza bruta veloce
	\end{itemize}
\end{frame}
\end{document}
